# -*- Mode: Python -*-
# vim: filetype=python
#
# SPDX-License-Identifier: GPL-2.0-or-later
# This work is licensed under the terms of the GNU GPL, version 2 or later.
# See the COPYING file in the top-level directory.

{ 'include': 'machine-common.json' }

##
# @S390CpuPolarization:
#
# An enumeration of CPU polarization that can be assumed by a virtual
# S390 CPU
#
# Since: 8.2
##
{ 'enum': 'S390CpuPolarization',
  'data': [ 'horizontal', 'vertical' ]
}

##
# @set-cpu-topology:
#
# Modify the topology by moving the CPU inside the topology tree, or
# by changing a modifier attribute of a CPU.  Absent values will not
# be modified.
#
# @core-id: the vCPU ID to be moved
#
# @socket-id: destination socket to move the vCPU to
#
# @book-id: destination book to move the vCPU to
#
# @drawer-id: destination drawer to move the vCPU to
#
# @entitlement: entitlement to set
#
# @dedicated: whether the provisioning of real to virtual CPU is
#     dedicated
#
# Features:
#
# @unstable: This command is experimental.
#
# Since: 8.2
##
{ 'command': 'set-cpu-topology',
  'data': {
      'core-id': 'uint16',
      '*socket-id': 'uint16',
      '*book-id': 'uint16',
      '*drawer-id': 'uint16',
      '*entitlement': 'S390CpuEntitlement',
      '*dedicated': 'bool'
  },
  'features': [ 'unstable' ]
}

##
# @CPU_POLARIZATION_CHANGE:
#
# Emitted when the guest asks to change the polarization.
#
# The guest can tell the host (via the PTF instruction) whether the
# CPUs should be provisioned using horizontal or vertical
# polarization.
#
# On horizontal polarization the host is expected to provision all
# vCPUs equally.
#
# On vertical polarization the host can provision each vCPU
# differently.  The guest will get information on the details of the
# provisioning the next time it uses the STSI(15) instruction.
#
# @polarization: polarization specified by the guest
#
# Features:
#
# @unstable: This event is experimental.
#
# Since: 8.2
#
# .. qmp-example::
#
#     <- { "event": "CPU_POLARIZATION_CHANGE",
#          "data": { "polarization": "horizontal" },
#          "timestamp": { "seconds": 1401385907, "microseconds": 422329 } }
##
{ 'event': 'CPU_POLARIZATION_CHANGE',
  'data': { 'polarization': 'S390CpuPolarization' },
  'features': [ 'unstable' ]
}

##
# @CpuPolarizationInfo:
#
# The result of a CPU polarization query.
#
# @polarization: the CPU polarization
#
# Since: 8.2
##
{ 'struct': 'CpuPolarizationInfo',
  'data': { 'polarization': 'S390CpuPolarization' }
}

##
# @query-s390x-cpu-polarization:
#
# Features:
#
# @unstable: This command is experimental.
#
# Returns: the machine's CPU polarization
#
# Since: 8.2
##
{ 'command': 'query-s390x-cpu-polarization', 'returns': 'CpuPolarizationInfo',
  'features': [ 'unstable' ]
}
